%     AERO LOAD - программа для нагружения агрегатов самолета распределенной нагрузкой
%     Copyright (C) 2018-2024  Михаил Козлов
%     Сайт проекта: <http://www.fastenerdoctor.ru/>
%     Адрес электронной почты для связи с разработчиком:
%     <doctor.fastener@gmail.com>
% 
%     Эта программа является свободным программным обеспечением: Вы можете
%     распространять ее и/или изменять, соблюдая условия Универсальной общественной
%     лицензии GNU, опубликованной Фондом свободного программного обеспечения,
%     либо редакции 3, либо (на Ваше усмотрение) любой редакции, выпущенной позже.
% 
%     Эта программа распространяется в надежде на то, что она окажется полезной,
%     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая даже подразумеваемую гарантию ТОВАРНОЙ ПРИГОДНОСТИ,
%     либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Универсальной общественной
%     лицензией GNU для получения более подробной информации.
% 
%     Вы должны были получить копию Универсальной общественной лицензии GNU
%     вместе с этой программой. Если Вы ее не получили, то перейдите по адресу:
%     <http://www.gnu.org/licenses/>.
% 
%     This program is free software: you can redistribute it and/or modify
%     it under the terms of the GNU General Public License as published by
%     the Free Software Foundation, either version 3 of the License, or
%     (at your option) any later version.
% 
%     This program is distributed in the hope that it will be useful,
%     but WITHOUT ANY WARRANTY; without even the implied warranty of
%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%     GNU General Public License for more details.
% 
%     You should have received a copy of the GNU General Public License
%     along with this program.  If not, see <https://www.gnu.org/licenses/>.

function GW_Set_Rotation_Center(~,~)

global Graphic_Window_Handle;

% zoom(Graphic_Window_Handle, 'off');
% pan(Graphic_Window_Handle, 'off');
% cameratoolbar('SetMode', 'nomode');

% Button = findall(Graphic_Window_Handle, 'Tag', 'Zoom_Button');
% GW_Unpress_Button(Button, []);
% 
% Button = findall(Graphic_Window_Handle, 'Tag', 'Pan_View_Button');
% GW_Unpress_Button(Button, []);
% 
% Button = findall(Graphic_Window_Handle, 'Tag', 'Rotate_View_Button');
% GW_Unpress_Button(Button, []);
% 
% Button = findall(Graphic_Window_Handle, 'Tag', 'Rotate_Axis_Button');
% GW_Unpress_Button(Button, []);

datacursormode on;

dcm_obj = datacursormode(Graphic_Window_Handle);

set(dcm_obj, 'SnapToDataVertex', 'off');

tmp = waitforbuttonpress; %#ok<NASGU>

tmp = findall(Graphic_Window_Handle, 'Type', 'hggroup');

for i=1:numel(tmp)
    if (~isempty(tmp(i)))
        set(tmp(i), 'Visible', 'off');
    end
end

f = getCursorInfo(dcm_obj);

datacursormode off;

if (~isempty(f))

    Point = f.Position;

    xl = xlim;
    yl = ylim;
    zl = zlim;

    xlim([Point(1) - (xl(2) - xl(1))/2, Point(1) + (xl(2) - xl(1))/2]);
    ylim([Point(2) - (yl(2) - yl(1))/2, Point(2) + (yl(2) - yl(1))/2]);
    zlim([Point(3) - (zl(2) - zl(1))/2, Point(3) + (zl(2) - zl(1))/2]);

end

Axes_Handle = findall(Graphic_Window_Handle, 'Tag', 'Main_Axes');

% Установка параметров
set(Axes_Handle, 'CameraViewAngleMode', 'manual', 'CameraUpVectorMode', 'manual', 'CameraTargetMode', 'manual', 'CameraPositionMode', 'manual');
pause(0.01);

% Перенос
New_Target = [Point(1) Point(2) Point(3)];
New_Position = Axes_Handle.CameraPosition + [Point(1) Point(2) Point(3)] - Axes_Handle.CameraTarget;

set(Axes_Handle, 'CameraPosition', New_Position, 'CameraTarget', New_Target);
